import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.util.HashSet;
import java.util.Vector;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.ButtonGroup;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.SwingConstants;
import javax.swing.JComboBox;
import javax.swing.JList;
import java.awt.Button;
import java.awt.List;
import javax.swing.JScrollBar;
import java.awt.ScrollPane;
import javax.swing.JScrollPane;
import java.util.HashMap;
import javax.swing.JTextArea;
import javax.swing.JRadioButton;
import javax.swing.JSeparator;
import java.awt.Color;
import javax.swing.ScrollPaneConstants;
import javax.swing.ListSelectionModel;
/**
 * Fenêtre de saisie d'un ouvrage 
 * Code du JFrame généré par Window Builder/Swing Designer.
 * @author IUT,  A.Culet 
 * @version 1.0
 */
public class VueSaisieOuvrage extends Vue {

	
	
	private JPanel contentPane;
	private JTextField textFieldIsbn ;
	private JTextField textFieldTitre;
	private JTextField textFieldDate;
	private JTextField textFieldEditeur;
	private JButton buttonEnreg;
	private JButton buttonAnnuler;
	private JButton btnSuivant;
	private JTextField textFieldNom;
	private JTextField textFieldPrenom;
	private JButton btnSuivant2;
	private JButton btnTerminer;
	private JButton btnAnnuler2;
	private JButton btnAnnuler1;
	HashSet<Auteur> auteursOuvrage= new HashSet<Auteur>();
	HashSet<MotsCles> motsclesOuvrage= new HashSet<MotsCles>();
	String isbn;
	String titre;
	String editeur;
	String dateEdition;
	private JTextArea textAreaAuteurs;
	private JScrollPane scrollPane;
	private JTextField textFieldDateRecep;
	private JButton btnSuivant3;
	private JButton btnAnnuler3;
	private JButton btnTerminer1;
	private JButton btnAnnuler4;
	private JRadioButton radioButton;
	private JRadioButton radioButton_1;
	private JButton btnEnregistrer;
	
	//vecteur de mot cle pour la premiere liste
	Vector<String> vectMotsCles= new Vector();
	//vecteur de mot cle selectionné
	Vector<String> vectMotsCles2= new Vector();
	private JScrollPane scrollPane_1;
	private JList list;
	private JScrollPane scrollPane_2;
	private JList list_1;
	private JButton btnRinitialiser;
	/**
	 * Create the frame.
	 */
	public VueSaisieOuvrage(Controleur controleur) {
		super(controleur);
		
		
		
		setTitle("Enregistrement d'un nouvel ouvrage");
		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
		setBounds(100, 100, 880, 485);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		JLabel lblNewLabel = new JLabel("Isbn");
		lblNewLabel.setHorizontalAlignment(SwingConstants.RIGHT);
		lblNewLabel.setBounds(91, 12, 61, 15);
		contentPane.add(lblNewLabel);
		
		textFieldIsbn = new JTextField();
		textFieldIsbn.setBounds(170, 10, 141, 19);
		contentPane.add(textFieldIsbn);
		textFieldIsbn.setColumns(10);
		
		JLabel lblNewLabel_1 = new JLabel("Titre");
		lblNewLabel_1.setHorizontalAlignment(SwingConstants.RIGHT);
		lblNewLabel_1.setBounds(91, 113, 61, 15);
		contentPane.add(lblNewLabel_1);
		
		textFieldTitre = new JTextField();
		textFieldTitre.setEditable(false);
		textFieldTitre.setBounds(170, 111, 225, 19);
		contentPane.add(textFieldTitre);
		textFieldTitre.setColumns(10);
		
		buttonEnreg = new JButton("Suivant");
		buttonEnreg.setEnabled(false);
		buttonEnreg.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				//pour le clique sur le deuxieme bouton suivant
				//recuperation des entrées
				titre = textFieldTitre.getText();
				editeur = textFieldEditeur.getText();
			    dateEdition = textFieldDate.getText();
				Vector<String> vect= new Vector();
				vect.addElement(titre);
				vect.addElement(editeur);
				vect.addElement(dateEdition);
				//appel de la methode pour verifier qu'aucun champ n'est vide
				if(getControleur().champsVide(vect)==true){
					if(getControleur().dateValide(dateEdition)){
					HashMap<String, Auteur> auteurs;
					auteurs= new HashMap<String, Auteur>();
					//recherche de tout les auteurs
					auteurs=getControleur().rechAuteurs();
					//appel de la fonction qui alimente la vue avec les auteurs existant
					getControleur().alimenteAuteurs(auteurs);
					}	
				}
				}
		});
		buttonEnreg.setBounds(288, 203, 107, 25);
		contentPane.add(buttonEnreg);
		
		buttonAnnuler = new JButton("Annuler");
		buttonAnnuler.setEnabled(false);
		buttonAnnuler.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
			//au clique sur annuler la fenetre repasse à l'état initiale
			setEtat(initiale);}
		});
		buttonAnnuler.setBounds(288, 237, 107, 25);
		contentPane.add(buttonAnnuler);
		
		JLabel lblNewLabel_2 = new JLabel("Date édition (MM/AAAA)");
		lblNewLabel_2.setHorizontalAlignment(SwingConstants.RIGHT);
		lblNewLabel_2.setBounds(12, 166, 154, 33);
		contentPane.add(lblNewLabel_2);
		
		textFieldDate = new JTextField();
		textFieldDate.setEditable(false);
		textFieldDate.setBounds(170, 173, 114, 19);
		contentPane.add(textFieldDate);
		textFieldDate.setColumns(10);
		
		JLabel lblEditeur = new JLabel("Editeur");
		lblEditeur.setHorizontalAlignment(SwingConstants.RIGHT);
		lblEditeur.setBounds(91, 140, 61, 15);
		contentPane.add(lblEditeur);
		
		textFieldEditeur = new JTextField();
		textFieldEditeur.setEditable(false);
		textFieldEditeur.setColumns(10);
		textFieldEditeur.setBounds(170, 142, 225, 19);
		contentPane.add(textFieldEditeur);
		
		//premier bouton suivant
		btnSuivant = new JButton("Suivant");
		btnSuivant.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				//enregistrement de l'isbn dans une variable
				isbn = textFieldIsbn.getText();
				//recherche d'ouvrage
				getControleur().rechOuvrage(isbn);
		}});
		btnSuivant.setBounds(288, 44, 107, 25);
		contentPane.add(btnSuivant);
		
		btnAnnuler1 = new JButton("Annuler");
		btnAnnuler1.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
			getControleur().fermerVue(VueSaisieOuvrage.this);}
		});
		btnAnnuler1.setBounds(288, 74, 107, 25);
		contentPane.add(btnAnnuler1);
		
		JLabel lblNom = new JLabel("Nom");
		lblNom.setBounds(170, 330, 61, 15);
		contentPane.add(lblNom);
		
		JLabel lblPrenom = new JLabel("Prenom");
		lblPrenom.setBounds(170, 357, 61, 15);
		contentPane.add(lblPrenom);
		
		textFieldNom = new JTextField();
		textFieldNom.setEditable(false);
		textFieldNom.setBounds(233, 326, 141, 19);
		contentPane.add(textFieldNom);
		textFieldNom.setColumns(10);
		
		textFieldPrenom = new JTextField();
		textFieldPrenom.setEditable(false);
		textFieldPrenom.setBounds(233, 355, 141, 19);
		contentPane.add(textFieldPrenom);
		textFieldPrenom.setColumns(10);
		
		btnAnnuler2 = new JButton("Annuler");
		btnAnnuler2.setEnabled(false);
		btnAnnuler2.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				//remise de la fenetre a l'état inter1
				setEtat(inter1);}
		});
		btnAnnuler2.setBounds(170, 420, 107, 25);
		contentPane.add(btnAnnuler2);
		
		btnSuivant2 = new JButton("Ajouter");
		btnSuivant2.setEnabled(false);
		btnSuivant2.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				//recuperation des entrées
				String nom = textFieldNom.getText();
				String prenom = textFieldPrenom.getText();
				Vector<String> vect= new Vector();
				vect.addElement(nom);
				vect.addElement(prenom);
				//appel de la methode pour verifier qu'aucun champ n'est vide
				if(getControleur().champsVide(vect)==true){
					//recherche si l'auteur est déja enregistré
					Auteur b=getControleur().rechAuteur(nom, prenom);
					Auteur a=new Auteur(nom,prenom);
					//ajout de l'auteur dans l'ensemble d'auteurs de l'ouvrage
					
						auteursOuvrage.add(b);
						textAreaAuteurs.append(nom+"  "+prenom+"\n");
					
					
					textFieldNom.setText("");
					textFieldPrenom.setText("");
					HashMap<String, Auteur> auteurs;
					textAreaAuteurs.setText(null);
					auteurs= new HashMap<String, Auteur>();
					auteurs=getControleur().rechAuteurs();
					//appel de la fonction qui alimente la vue avec les auteurs existant
					getControleur().alimenteAuteurs(auteurs);
					//rend possible le clique sur terminer
					btnTerminer.setEnabled(true);
				}
			}
			});
		btnSuivant2.setBounds(170, 383, 107, 25);
		contentPane.add(btnSuivant2);
		
		btnTerminer = new JButton("Terminer");
		btnTerminer.setEnabled(false);
		btnTerminer.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				//affiche combien d'auteur on été enregistré pour l'ouvrage
				Message dialog = new Message("Vous avez ajouté : "+auteursOuvrage.size()+" auteurs à l'ouvrage.");
				dialog.setVisible(true);
				//appel de la recherche de tout les mots cles
				HashMap<String,MotsCles> motscles;
				motscles= new HashMap<String, MotsCles>();
				motscles=getControleur().rechMotsCles();
				//appel de la procedure qui alimente la vue avec tout les mots cles
				getControleur().alimenteMotsCles(motscles);			
			}
		});
		btnTerminer.setBounds(288, 383, 107, 25);
		contentPane.add(btnTerminer);
		
		scrollPane = new JScrollPane();
		scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
		scrollPane.setBounds(12, 321, 141, 125);
		contentPane.add(scrollPane);
		
		textAreaAuteurs = new JTextArea();
		scrollPane.setColumnHeaderView(textAreaAuteurs);
		
		btnSuivant3 = new JButton("Ajouter");
		btnSuivant3.setEnabled(false);
		btnSuivant3.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				if(!list.isSelectionEmpty()){
					MotsCles m=getControleur().getMotCle((String)list.getSelectedValue());
					if(!vectMotsCles2.contains(m.getMot())){
						motsclesOuvrage.add(m);
						vectMotsCles2.addElement(m.getMot());
						list_1.setListData(vectMotsCles2);
					}
					btnTerminer1.setEnabled(true);
				}
			}
		});
		btnSuivant3.setBounds(581, 44, 117, 25);
		contentPane.add(btnSuivant3);
		
		btnAnnuler3 = new JButton("Annuler");
		btnAnnuler3.setEnabled(false);
		btnAnnuler3.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				motsclesOuvrage.clear();
				auteursOuvrage.clear();
				vectMotsCles2.clear();
				list_1.setListData(vectMotsCles2);
				setEtat(inter2);
			}
		});
		btnAnnuler3.setBounds(581, 74, 117, 25);
		contentPane.add(btnAnnuler3);
		
		btnTerminer1 = new JButton("Terminer");
		btnTerminer1.setEnabled(false);
		btnTerminer1.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				//affiche combien de motscles on été enregistré pour l'ouvrage
				Message dialog = new Message("Vous avez ajouté : "+motsclesOuvrage.size()+" mots cles à l'ouvrage.");
				dialog.setVisible(true);
				//appel de la methode nouvOuvrage
				getControleur().nouvOuvrage(isbn,titre,editeur,dateEdition,auteursOuvrage,motsclesOuvrage);
				setEtat(inter4);
			}
		});
		btnTerminer1.setBounds(710, 203, 117, 25);
		contentPane.add(btnTerminer1);
		
		JLabel lblAjoutDunExemplaire = new JLabel("Ajout d'un exemplaire");
		lblAjoutDunExemplaire.setBounds(443, 247, 255, 15);
		contentPane.add(lblAjoutDunExemplaire);
		
		JLabel lblDateReception = new JLabel("Date Reception(MM/AAAA)");
		lblDateReception.setBounds(436, 291, 193, 15);
		contentPane.add(lblDateReception);
		
		textFieldDateRecep = new JTextField();
		textFieldDateRecep.setEditable(false);
		textFieldDateRecep.setBounds(630, 289, 114, 19);
		contentPane.add(textFieldDateRecep);
		textFieldDateRecep.setColumns(10);
		
		JLabel lblStatut = new JLabel("Statut");
		lblStatut.setBounds(567, 328, 45, 15);
		contentPane.add(lblStatut);
		
		radioButton = new JRadioButton("Consultable");
		radioButton.setEnabled(false);
		radioButton.setBounds(630, 324, 134, 23);
		contentPane.add(radioButton);
		
		radioButton_1 = new JRadioButton("Empruntable");
		radioButton_1.setEnabled(false);
		radioButton_1.setSelected(true);
		radioButton_1.setBounds(630, 355, 134, 23);
		contentPane.add(radioButton_1);
		
		ButtonGroup bgroup = new ButtonGroup();
		bgroup.add(radioButton);
		bgroup.add(radioButton_1);
		
		btnEnregistrer = new JButton("Enregistrer");
		btnEnregistrer.setEnabled(false);
		btnEnregistrer.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				String dateReception = textFieldDateRecep.getText();
				String statut;
				if (radioButton.isSelected()) {
					statut = "consultable";}
				else {
					statut = "empruntable";}
				Ouvrage ouv=getControleur().getOuvrageIsbn(isbn);
				//création de l'exemplaire
				getControleur().nouvExemplaire(ouv, dateReception, statut);
				//fermeture de la vue
				getControleur().fermerVue(VueSaisieOuvrage.this);
			}
		});
		btnEnregistrer.setBounds(710, 394, 117, 25);
		contentPane.add(btnEnregistrer);
		
		btnAnnuler4 = new JButton("Annuler");
		btnAnnuler4.setEnabled(false);
		btnAnnuler4.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				setEtat(inter3);
				btnTerminer1.setEnabled(true);
			}
		});
		btnAnnuler4.setBounds(551, 394, 117, 25);
		contentPane.add(btnAnnuler4);
		
		JSeparator separator = new JSeparator();
		separator.setBounds(74, 99, 300, 2);
		contentPane.add(separator);
		
		JSeparator separator_1 = new JSeparator();
		separator_1.setBounds(53, 274, 300, 2);
		contentPane.add(separator_1);
		
		JSeparator separator_2 = new JSeparator();
		separator_2.setBounds(498, 233, 300, 2);
		contentPane.add(separator_2);
		
		JSeparator separator_3 = new JSeparator();
		separator_3.setOrientation(SwingConstants.VERTICAL);
		separator_3.setBounds(422, 22, 8, 423);
		contentPane.add(separator_3);
		
		JLabel lblSaisieDesAuteurs = new JLabel("Saisie des auteurs");
		lblSaisieDesAuteurs.setBounds(161, 290, 161, 15);
		contentPane.add(lblSaisieDesAuteurs);
		
		scrollPane_1 = new JScrollPane();
		scrollPane_1.setBounds(443, 12, 124, 171);
		contentPane.add(scrollPane_1);
		
		list = new JList();
		scrollPane_1.setViewportView(list);
		
		scrollPane_2 = new JScrollPane();
		scrollPane_2.setBounds(720, 12, 132, 171);
		contentPane.add(scrollPane_2);
		
		list_1 = new JList();
		scrollPane_2.setViewportView(list_1);
		
		JLabel lblAuteursExistant = new JLabel("Auteurs existant :");
		lblAuteursExistant.setBounds(12, 291, 140, 15);
		contentPane.add(lblAuteursExistant);
		
		btnRinitialiser = new JButton("Réinitialiser");
		btnRinitialiser.setEnabled(false);
		btnRinitialiser.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				motsclesOuvrage.clear();
				vectMotsCles2.clear();
				btnTerminer1.setEnabled(false);
				list_1.setListData(vectMotsCles2);
			}
		});
		btnRinitialiser.setBounds(581, 153, 127, 25);
		contentPane.add(btnRinitialiser);
		
		
	}
	
	//recherche le nom et le prenom d'un auteur et l'ajoute dans le text area des auteurs
	public void alimente(Auteur a) {
		
		String nom,prenom;
		nom=a.getNom();
		prenom=a.getPrenom();
		textAreaAuteurs.append(nom+"  "+prenom+ "\n");
	}	
	
	public void alimente(MotsCles m) {
		//alimente le vecteur vectMotsCles du motscles courrant
		vectMotsCles.addElement(m.getMot());
		//alimente la liste
		list.setListData(vectMotsCles);
	}
	
	
	public void setEtat (int etat){
		switch (etat) {
		case initiale:{
			textFieldIsbn.setEditable(true);
			btnSuivant.setEnabled(true);
			buttonEnreg.setEnabled(false);
			buttonAnnuler.setEnabled(false);
			textFieldTitre.setEditable(false);
			textFieldEditeur.setEditable(false);
			textFieldDate.setEditable(false);
			btnAnnuler1.setEnabled(true);
			textAreaAuteurs.setEnabled(false);
			break;
		}
		case inter1: {
			textFieldIsbn.setEditable(false);
			btnSuivant.setEnabled(false);
			buttonEnreg.setEnabled(true);
			btnAnnuler1.setEnabled(false);
			buttonAnnuler.setEnabled(true);
			textFieldTitre.setEditable(true);
			textFieldEditeur.setEditable(true);
			textFieldDate.setEditable(true);
			textFieldNom.setEditable(false);
			textFieldPrenom.setEditable(false);
			btnSuivant2.setEnabled(false);
			btnAnnuler2.setEnabled(false);
			btnTerminer.setEnabled(false);
			textAreaAuteurs.setEnabled(false);
			break;
			}
		case inter2:{
			textFieldNom.setEditable(true);
			textFieldPrenom.setEditable(true);
			btnSuivant2.setEnabled(true);
			btnAnnuler2.setEnabled(true);
			btnTerminer.setEnabled(false);
			buttonEnreg.setEnabled(false);
			buttonAnnuler.setEnabled(false);
			textFieldTitre.setEditable(false);
			textFieldEditeur.setEditable(false);
			textFieldDate.setEditable(false);
			textAreaAuteurs.setEnabled(true);
			btnSuivant3.setEnabled(false);
			btnRinitialiser.setEnabled(false);
			btnAnnuler3.setEnabled(false);
			btnTerminer1.setEnabled(false);
			break;
		}
		case inter3:{
			textFieldNom.setEditable(false);
			textFieldPrenom.setEditable(false);
			btnSuivant2.setEnabled(false);
			btnAnnuler2.setEnabled(false);
			btnTerminer.setEnabled(false);
			btnSuivant3.setEnabled(true);
			btnRinitialiser.setEnabled(true);
			btnAnnuler3.setEnabled(true);
			btnTerminer1.setEnabled(false);
			btnAnnuler4.setEnabled(false);
			btnEnregistrer.setEnabled(false);
			radioButton.setEnabled(false);
			radioButton_1.setEnabled(false);
			textFieldDateRecep.setEditable(false);
			break;
		}
		case inter4:{
			btnSuivant3.setEnabled(false);
			btnAnnuler3.setEnabled(false);
			btnTerminer1.setEnabled(false);
			btnAnnuler4.setEnabled(true);
			btnEnregistrer.setEnabled(true);
			radioButton.setEnabled(true);
			radioButton_1.setEnabled(true);
			textFieldDateRecep.setEditable(true);
			break;
		}
		}
	}
}
